home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacGames Sampler
/
PHT MacGames Bundle.iso
/
MacSource Folder
/
Samples from the CD
/
C and C++
/
Gnuplot 3.5 for Macintosh
/
SOURCES 3.5
/
term
/
pslatex.trm
(
.txt
)
< prev
next >
Wrap
LaTeX Document
|
1993-11-03
|
5KB
|
171 lines
* $Id: pslatex.trm%v 3.50 1993/07/09 05:35:24 woo Exp $
/* GNUPLOT - pslatex.trm */
* Copyright (C) 1990 - 1993
* Permission to use, copy, and distribute this software and its
* documentation for any purpose with or without fee is hereby granted,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
* Permission to modify the software is granted, but not the right to
* distribute the modified code. Modifications are to be distributed
* as patches to released version.
* This software is provided "as is" without express or implied warranty.
* This file is included by ../term.c.
* This terminal driver supports:
* latex with embedded postscript
* AUTHORS
* George Phillips
* Russell Lang
* David Kotz
* send your comments or suggestions to (info-gnuplot@dartmouth.edu).
/* Driver by George Phillips */
#define PSLATEX_XMAX (5*720)
#define PSLATEX_YMAX (3*720)
/* 10 pt char is about 10 pts high (say) */
#define PSLATEX_VCHAR (100)
/* 10 pt char is about 6 pts wide (say) */
#define PSLATEX_HCHAR (60)
static int PSLATEX_angle;
static int PSLATEX_justify;
static int PSLATEX_rotate = TRUE;
struct text_command {
int x, y, angle, justify;
char* label;
struct text_command* next;
static struct text_command* PSLATEX_labels;
PSLATEX_options()
if (!END_OF_COMMAND) {
if (almost_equals(c_token, "d$efault")) {
ps_color = FALSE;
PSLATEX_rotate = TRUE;
c_token++;
}
if (!END_OF_COMMAND) {
if (almost_equals(c_token, "c$olor")) {
ps_color = TRUE;
c_token++;
}
if (!END_OF_COMMAND) {
if (almost_equals(c_token, "m$onochrome")) {
ps_color = FALSE;
c_token++;
}
if (!END_OF_COMMAND) {
if (almost_equals(c_token, "r$otate")) {
PSLATEX_rotate = TRUE;
c_token++;
}
if (!END_OF_COMMAND) {
if (almost_equals(c_token, "n$orotate")) {
PSLATEX_rotate = FALSE;
c_token++;
}
sprintf(term_options, "%s %s", ps_color ? "color" : "monochrome",
PSLATEX_rotate ? "rotate" : "norotate");
PSLATEX_init()
/* reset PostScript driver variables */
ps_portrait = TRUE;
ps_eps = FALSE;
ps_color = FALSE;
fprintf(outfile, "%% GNUPLOT: LaTeX picture with Postscript\n");
fprintf(outfile, "\\setlength{\\unitlength}{0.1bp}\n");
fprintf(outfile, "\\special{!\n");
PS_init();
fprintf(outfile, "}\n");
PSLATEX_angle = 0;
PSLATEX_justify = 0;
PSLATEX_labels = 0;
PSLATEX_scale(xs, ys)
double xs, ys;
register struct termentry *t = &term_tbl[term];
t->xmax = (unsigned int)(PSLATEX_XMAX * xs);
t->ymax = (unsigned int)(PSLATEX_YMAX * ys);
return TRUE;
PSLATEX_graphics()
struct termentry *t = &term_tbl[term];
fprintf(outfile, "\\begin{picture}(%d,%d)(0,0)\n", t->xmax, t->ymax);
fprintf(outfile, "\\special{\"\n");
PS_graphics();
/* thwart the translation done by PS_graphics() */
fprintf(outfile, "%f %f translate\n",
-PS_XOFF * (float)PS_SC, -PS_YOFF * (float)PS_SC);
PSLATEX_labels = (struct text_command *)NULL;
PSLATEX_put_text(x, y, str)
int x, y;
char str[];
struct text_command* tc;
/* ignore empty strings */
if (str[0] == '\0')
return(0);
tc = (struct text_command*)alloc(sizeof(struct text_command),"pslatex");
tc->x = x;
tc->y = y;
tc->label = (char *)alloc(strlen(str) + 1,"pslatex");
strcpy(tc->label, str);
tc->justify = PSLATEX_justify;
tc->angle = PSLATEX_angle;
tc->next = PSLATEX_labels;
PSLATEX_labels = tc;
PSLATEX_justify_text(mode)
enum JUSTIFY mode;
PSLATEX_justify = mode;
return TRUE;
int PSLATEX_text_angle(angle)
int angle;
/* rotated text is put in a short stack, and optionally uses
* postscript specials depending on PSLATEX_rotate */
PSLATEX_angle = angle;
return TRUE;
PSLATEX_reset()
PSLATEX_text()
struct text_command* tc;
PS_text();
fprintf(outfile, "}\n");
for (tc = PSLATEX_labels; tc != (struct text_command*)NULL; tc = tc->next) {
fprintf(outfile, "\\put(%d,%d){", tc->x, tc->y);
switch (tc->angle) {
case 0:
switch (tc->justify) {
case LEFT:
fprintf(outfile, "\\makebox(0,0)[l]{%s}", tc->label);
break;
case CENTRE:
fprintf(outfile, "\\makebox(0,0){%s}", tc->label);
break;
case RIGHT:
fprintf(outfile, "\\makebox(0,0)[r]{%s}", tc->label);
break;
}
break;
case 1: /* put text in a short stack */
if (PSLATEX_rotate) {
fprintf(outfile, "%%\n\\special{ps: gsave currentpoint currentpoint translate\n");
fprintf(outfile, "270 rotate neg exch neg exch translate}%%\n");
}
switch (tc->justify) {
case LEFT:
fprintf(outfile, "\\makebox(0,0)[lb]{\\shortstack{%s}}",
tc->label);
break;
case CENTRE:
fprintf(outfile, "\\makebox(0,0)[b]{\\shortstack{%s}}",
tc->label);
break;
case RIGHT:
fprintf(outfile, "\\makebox(0,0)[lt]{\\shortstack{%s}}",
tc->label);
break;
}
if (PSLATEX_rotate) {
fprintf(outfile, "%%\n\\special{ps: currentpoint grestore moveto}%%\n");
}
fprintf(outfile, "}\n");
}
while (PSLATEX_labels) {
tc = PSLATEX_labels->next;
free(PSLATEX_labels->label);
free(PSLATEX_labels);
PSLATEX_labels = tc;
}
fprintf(outfile, "\\end{picture}\n");